package com.szrt.ssm.java.io.example01.demo04;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;


/**
 * 最优选择方案
 * 在FileInputStreamDemo03的基础上做了循环的优化 直接把byte类型的数组转化成字符串
 * 关键点：java.lang.String 有1个构造方法可以将byte类型的数组直接转化成字符串
 */
public class FileInputStreamDemo04 {
	
	public static void main(String[] args) {
		FileInputStream fis = null;
		try {
			File file = new File("io/hello.txt");
			fis = new FileInputStream(file);
			
			//一次性搬5桶水
			byte[] b = new byte[5];
			//fis读文件,写入到数组b中。每次写入length个。如果返回-1就说明文件读取结束 读取到的数据保存在数组b中
			int len;
			while((len=fis.read(b)) != -1){
				String str = new String(b,0,len);
				System.out.print(str);
				//System.out.println();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(null != fis){
				//4 关闭相应的流 访问的是磁盘的资源 不是java虚拟机内存的资源。Java虚拟机不会自动垃圾回收
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
